#region Context层
    #region 框架之ROOT DemoContextView : ContextView
        using strange.extensions.context.impl;
        /*
            DemoContextView 名字是我自己定的，游戏里需要一个同名的（命名规范）空对象挂载
            这个对象主要工作就是创建 Context 对象
         */
        void Awake(){ this.context = new DemoContext(this); }
        //context 是父类里定义的对象，实例化出来之后，框架正式启动
    #endregion

    #region DemoContext : Context
        using strange.extensions.context.impl;
        /*
            主要完成绑定工作。
            需要实现以下方法
         */
        public DemoContext(MonoBehaviour view):base(view){}//实现一个构造方法
        protected override void mapBindings()
        {
            //完成 model 的绑定
            //完成 service 的绑定
            injectionBinder.Bind<IScoreService>().To<ScoreService>().ToSingleton();//ToSingleton 表示单例，不重复创建对象
            //完成 commmand 的绑定
            //完成 mediator 的绑定
            mediationBinder.Bind<MyView>().To<MyMediator>();
            //完成 StartCommand 的绑定 StartCommand 是一个自定义的类，继承自 Command，主要完成游戏的初始化工作
            commandBinder.Bind(ContextEvent.START).To<StartCommand>().Once();//Once 表示只进行一次，完成后就解绑
        }

        
    #endregion

#endregion



#region EventDispatcher : Binder,IEventDispatcher 派发器
    using strange.extensions.dispatcher.eventdispatcher.impl;
    void IEventDispatcher.AddListener(object key,EmptyCallback callback);//把一个 void EmptyCallback(IEvent evt) 绑定到key上。
    void IEventDispatcher.Dispatch(object key,object data);//执行这个派发器，第二个参数为执行回调传入的参数，回调通过 IEvent{get;se;} 获取参数
    void IEventDispatcher.RemoveListener(object key,EmptyCallback callback);//把这个回调移除掉
#endregion

#region MyCommand : Command
    using strange.extensions.command.impl;
    /*
        StrangeIoC 框架的一环，命令层 一个命令与一个枚举的值绑定
        命令层由 Context 曾绑定调用，他可以与 View层 Service层 Model层 交互
        自己创建的命令类需要继承自 Command 类，并且有以下方法可以重写
     */
    virtual void Command.Execute();//这个是必须重写的，执行命令的时候默认执行这个方法
    //命令层的对象一般是一次性的，被创建出来执行命令之后就会被框架销毁，但是我们可以控制什么时候销毁
    void Command.Retain();//暂时不被直接销毁
    void Command.Release();//释放这个命令


#endregion

#region View层
    /*
        该层包括两部分， View 与 Mediator
        View 主要控制显示的部分，需要用户自己定义，并继承 View, 命名上以 View 结尾。里面不直接执行逻辑代码，逻辑代码由 Mediator 调用
        Mediator 介于 View 与 Command 直接的中间层，隔离显示部分与逻辑部分。需要自己实现，继承自 Mediator ，命名上以 Mediator 结尾。一个 View 对应一个 Mediator 
     */
    //需要在 MyContext 里的 mapBindings(); 方法里做绑定
    mediationBinder.Bind<MyView>().To<MyMediator>();
    //绑定之后，在游戏物体上，我们只需要挂载 MyView ，框架会为我们挂载 MyMediator ，需要时注入依赖

    #region MyView : View
        using strange.extensions.mediation.impl;
        /*
            父类里实现里 Start() Awake() OnDestory() 里面包含了框架的代码
            所以子类里不建议重写，如果重写的话记得带上 base.Start() 等
         */
    #endregion

    #region MyMediator : Mediator
        using  strange.extensions.mediation.impl;
        /*
            可以重写以下方法
         */
        virtual void PreRegister();//在对象创建之后，注入之前调用
        virtual void OnRegister();//当所有注入都完成之后调用，在这里写入初始化代码。
        virtual void OnRemove();//在这个 View 被销毁的时候调用

        [Inject]
        public MyView myView{get;set;}//通过这个方式，框架为我们自动给传入本类对应的 View
    #endregion
#endregion

#region 依赖注入
    [Inject]//注入
    [Inject(ContextKeys.CONTEXT_DISPATCHER)]//注入全局派发器
#endregion